<h4>Release 74</h4>
<table>
<tbody>

<tr><td>Released: 2003-01-24 1105 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2003-02-12 1005 EST</td></tr>

<tr><td>Basis: Release 73</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-22</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>xc/lib/xtrans/Xtransutil.c - Remove Cygwin-specific defines of
fchown and fchmod to chown and chmod, respectively.  It is not clear
when these were added, but they are certainly no longer needed and are
likely the cause of the first segfault that occurs if you debug
XWin.exe under gdb.  (Takashi Sawanaka)</li>

<li>Remove the condition variable used in the startup of the threaded
clipboard manager and multi-window window manager; the condition
variable was not needed and actually caused a race condition that
could prevent either manager from starting up.  Instead, just use a
mutex to hold the threads until the server has started, at which point
the mutex is unlocked.  (Harold Hunt)</li>

<li>winmultiwindowwm.c, winclipboardthread.c - Remove calls to
_Xsetlocale and replace them with calls to setlocale, since
_Xsetlocale is just defined to be setlocale.  (Kensuke Matsuzaki)</li>

<li>Fix a problem where the server window would shrink each time the
server was reset.  This problem only happened in non-rootless,
non-fullscreen, non-nodecoration, and non-scrollbars modes.  In other
words, it only happened when you ran the X Server in a single window
that had a window border but no scrollbars.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>



<h4>Release 73</h4>
<table>
<tbody>

<tr><td>Released: 2003-01-20 0108 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2003-02-12 1005 EST</td></tr>

<tr><td>Basis: Release 72</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-21</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Preliminary integration of the <em>xwinclip</em> functionality
into the main server executable.  This functionality is accessible via
the <em>-clipboard</em> command-line parameter.  (Harold Hunt)</li>

<li>Delay the execution of the Multi-Window Window Manager thread
until the X Server has finished starting up.  (Harold Hunt)</li>

<li>Restructure the way that the Multi-Window Window Manager handles
fatal errors.  Return FALSE when we encounter an initialization error
so that the server can make a clean exit, instead of aborting
immediately by calling exit (1).  For later errors, call pthread_exit
(NULL) instead of exit (1) so that only the Multi-Window Window
Manager aborts; there is no need to kill the X Server process since
work could still be recovered without the window manager module.
(Harold Hunt)</li>

<li>Destroy the pthread mutex and condition variables, used for
synchronization in the Multi-Window Window Manager, upon X Server
exit.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>



<h4>Release 72</h4>
<table>
<tbody>

<tr><td>Released: 2003-01-17 0153 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2003-02-12 1005 EST</td></tr>

<tr><td>Basis: Release 71</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-20</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>winmultiwindowwindow.c - Add an evil, naughty, ugly, shameless,
and worthless hack to the multi-window mode to enable the X
Non-Rectangular Shape extension.  This will need to be evaluated and
fixed by other developers.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>



<h4>Release 71</h4>
<table>
<tbody>

<tr><td>Released: 2003-01-15 1007 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2003-02-12 1005 EST</td></tr>

<tr><td>Basis: Release 70</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>This is an unstripped build to aid in debugging the new
multiwindow mode.</li>

<li>Attempt at fixing the segfault on startup that some users are
reporting.  (Kensuke Matsuzaki)</li>

<li>New <em>-multimonitor</em> command-line parameter that is used to
tell XWin.exe to display across all available displays.  (Nick
Crabtree)</li>

</ul>
</td>
</tr>
</tbody>
</table>



<h4>Release 70</h4>
<table>
<tbody>

<tr><td>Released: 2003-01-12 1434 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2003-02-12 1005 EST</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-18</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>EXPERIMENTAL: New multiwindow mode (invoked with the
<em>-multiwindow</em> command-line parameter) that creates each
top-level X window in a Microsoft Windows window.  Note that there are
still debugging options on in this release, so do not expect
multiwindow mode to be polished enough for everyday use.  (Kensuke
Matsuzaki)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 69</h4>
<table>
<tbody>

<tr><td>Released: 2002-11-07 0015 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2003-02-12 1005 EST</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-16</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Fix memory leaks in rootless mode.  (Kensuke Matsuzaki)</li>

<li>The test releases, and all future stable releases, are now built
with GCC 3.2.  There were no problems encountered when switching to
the new compiler version.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>



<h4>Release 68</h4>
<table>
<tbody>

<tr><td>Released: 2002-10-20 2321 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-10-31 0610 EST</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-15</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Add support for non-rectangular windows created by the X Shape
Extension while in Rootless mode (e.g., ``XWin -rootless'').
(MATSUZAKI Kensuke)</li>

<li>Not in the release build, but in the sources: Clean up the RANDR
extension code to match the latest RANDR interface.  This can't be enabled
yet because it crashes on startup in 32 bit per pixel mode. (Harold Hunt)
</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 67</h4>
<table>
<tbody>

<tr><td>Released: 2002-10-18 2248 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: not yet</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-14</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Turn off debugging message in winwindow.c/winAddRgn () that was
being printed thousands, if not millions, of times.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>



<h4>Release 66</h4>
<table>
<tbody>

<tr><td>Released: 2002-10-16 2004 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-10-17 0400 EDT</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-13</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Include an X icon and the necessary build rules for building
Windows resource files (even while cross compiling).  (Harold Hunt,
Jehan Bing)</li>

<li>Include a preliminary rootless mode.  (MATSUZAKI Kensuke)</li>

<li>XF86Configfile suppport.  (Alexander Gottwald)</li>

<li>Scrollbars support.  (Jehan Bing, Harold Hunt)</li>

<li>Warning dialog on disruptive screen depth change --- not quite perfect.
(Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 65</h4>
<table>
<tbody>

<tr><td>Released: 2002-07-16 0051 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: not yet</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-12</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Enable initial scrollbar support, when the new ``-scrollbars''
command-line argument is passed.  (Jehan Bing, Harold Hunt)</li>

<li>Correct the preprocesor definition of PROJECTROOT for
xc/programs/Xserver/hw/xwin/Imakefile.  (Alexander Gottwald)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 64</h4>
<table>
<tbody>

<tr><td>Released: 2002-07-08 2212 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: not yet</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-11</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>winconfig.c, winconfig.h, winmsg.c, winmsg.h, InitOutput.c,
winkeybd.c - Add support for using XF86Config-style configuration
files.  (Alexander Gottwald)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 63</h4>
<table>
<tbody>

<tr><td>Released: 2002-07-04 0300 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-07-06 0959 UTC</td></tr>

<tr><td>Basis: Release 62</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-10</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>General - Fix the broken build that was Release 62.  Release 62 crashed
during its startup sequence for anyone unfortunate to download it
before it was pulled from distribution.  (Harold Hunt)</li>

<li>win.h, winmisc.c, winpfbdd.c, winshadgdi.c, winshaddd.c,
winshadddnl.c, winscrinit.c - Reimplement the stride pixel
calculations that were removed in Release 61.  The ``stride'' is the
number of whole pixels that fit in a padded scan line; in other words,
the stride is the number of bits in a scanline divided by the number
of bits used to store each pixel (i.e., bits per pixel).  We cannot
pass the simple pixel width of the window to the fb initialization
routines because sometimes we have invisible pixels on the scanline
that must be accounted for (e.g., when the number of pixels in the
width is odd).  Had anyone seen this bug they would have seen a server
that drew things diagonally (only -engine 2 seemed to exhibit this
problem).  (Harold Hunt)</li>

<li>winshaddd.c, winshadddnl.c - Add support for the `-clipupdates
num_boxes' parameter when using `-engine 2' or `-engine 4', in
addition to the previously supported `-engine 1'.  Once again, I can't
tell if this feature has any benefit whatsoever.  I need some
volunteers to perform rigorous testing with different values for the
threshold at which point updated boxes are collected into a clipping
region.  One may find the ``x11perf'' program beneficial here, as well
as ``glxgears'', which gives a frames per second reading.  Of course,
it would be most beneficial to have performance comparisons for a few
different machine types (processors, memory amounts, video cards, PCI
or AGP, etc.).  Update clipping is off by default.  (Harold Hunt)</li>

<li>win.h, InitOutput.c, winengine.c, winshaddd.c, winshadddnl.c,
winshadpfb.c - Change the DirectDraw module handle and function
pointers from screen privates to global variables.  Loading the
DirectDraw module and function pointers needs to be done only at
server initialization, not at screen initialization.  Similarly, we
don't need to unload and reload DirectDraw for each screen when the
server regenerates; rather, we need only unload DirectDraw when the
server is shutting down.  This cleanup makes it much for difficult to
misunderstand what is going on with the DirectDraw module handle and
function pointers.  (Harold Hunt)</li>

<li>win.h, InitOutput.c, winengine.c - Detect the supported engines
only once at startup, rather than once per screen initialization.
Rework the supported engine detection logic to assume that the
DirectDraw module handle and function pointers have already been
loaded if they are present and working.  (Harold Hunt)</li>

<li>win.h, InitOutput.c, winwndproc.c - Add a global module handle for
``comctl32.dll'' and ``_TrackMouseEvent''.  Try to get a pointer to
the _TrackMouseEvent function and print an informational message if we
cannot find the function, suggesting to the user that they install
Internet Explorer 3.0 or greater if they have not already done so.
We also set the _TrackMouseEvent function pointer to point to the no
operation function if we can't find a valid function so that any calls
to the function pointer will do nothing (instead of trying to
dereference a NULL and crashing).  Mouse pointer hiding/showing may be
messed up when we don't have _TrackMouseEvent, but the user can
remedy that by following the advice in the information message.
Remove our compile-time link to comctl32.dll.  (Harold Hunt)</li>

<li>InitOutput.c, winshadgdi.c, winshaddd.c, winshadddnl.c - Add an
`-emulatepseudo' parameter that causes a depth 8 PseudoColor visual to
be created in TrueColor modes, with the same limitations described in
the Release 62 change log.  PseudoColor emulation is off by default.
(Harold Hunt)</li>

<li>winscrinit.c - Add special handling for 8 bits per pixel screens
when calculating the depth of the screen.  An 8 bit per pixel screen
has no color masks so we can't sum up the bits in the color masks.
Fortunately, we know that an 8 bit per pixel screen is always depth
8.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 62</h4>
<table>
<tbody>

<tr><td>Released: 2002-07-02 0026 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-07-06 0959 UTC</td></tr>

<tr><td>Basis: Release 61</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-9</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>winscrinit.c, InitOutput.c, winshadgdi.c, winshaddd.c,
winshadddnl.c - Correctly calculate the number of bits used to store
color information by counting the total number of bits that are set in
our color masks.  This should fix problems introduced in Release 61 for
users with 24bpp or 15bpp displays.  (Alan Hourihane, Harold Hunt)</li>

<li>InitOutput.c, winshadgdi.c, win.h - Add support for an
experimental parameter, that only works with `-engine 1', that
combines a specified number of boxes in the shadow update region into
a GDI clipping region then performs a single Blt operation for the
entire shadow framebuffer to the primary framebuffer, using the
clipping region to constrain the Blt to the updated area.  You specify
the number of boxes in a region that should be combined into a
clipping region using the new `-clipupdates num_boxes' parameter; by
defaul the feature is disabled, which is done by setting num_boxes to
zero.  (Harold Hunt)</li>

<li>winshadgdi.c, winshaddd.c, winshadddnl.c - Add a call to
initialize an 8bpp PseudoColor visual on top of our TrueColor visual
when WIN_EMULATE_PSEUDO_SUPPORT is enabled; by default,
WIN_EMULATE_PSEUDO_SUPPORT is not enabled.  This new PseudoColor
visual will allow programs such as Magic 7.1 to display when
Cygwin/X is running with a TrueColor default visual; however,
the colors are all messed up.  It may be possible to fix the colors by
making changes to our local colormap handling funtions (and enabling
them in TrueColor mode, which they currently are not), or by making
some change to FB and/or SHADOW.  This feature is being added now
because Cygwin/X doesn't crash when we call
miSetVisualTypesAndMasks a second time; I must be doing something
differently now that fixed the crashing (probably the bpp and depth
handling fixes).  (Harold Hunt)</li>

<li>winshadgdi.c, winshaddd.c, winshaddnl.c - Add a #if conditional to
winInitVisuals* that calls miSetVisualTypesAndMasks or
fbSetVisualTypesAndMasks depending on if XFree86Server is defined.
Currently this isn't useful because Mesa (similar to Open GL) doesn't
work when XFree86Server is undefined.  I'll leave this here for now
for future reference.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 61</h4>
<table>
<tbody>

<tr><td>Released: 2002-06-27 0020 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-07-06 0959 UTC</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-8</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>General - Fix the KDE 3.0 alpha-channel icon bug that appeared
only when running Windows at 32 bits per pixel.  Many more details
below.  (Alan Hourihane)</li>

<li>
<p>General - pScreenInfo->dwDepth used to refer to the depth that the
user specified with the -depth parameter or the depth returned by
GetDeviceCaps (BITSPIXEL) and pScreenInfo->dwBPP used to refer to the
bits of color per pixel.  For example, running Windows at 32 bit color
would mean dwDepth == 32 and dwBPP == 24.  It turns out that this was
exactly backwards from what it should be.</p>

<p>The dwDepth variable new refers to the color ``depth'' of a pixel,
that is, the number of bits that make up the color specification for a
pixel.  For example, a 32 bit pixel uses 24 bits to represent color
plus an 8 bit pad for alignment purposes and a 16 bit pixel can use 15
or 16 bits to represent color.  The dwBPP variable now refers to the
bits used to store each pixel, that is, the number of bits that each
pixel occupies in the framebuffer memory.  For example, a 32 bit pixel
occupies 32 bits in the framebuffer memory while a 24 bit pixel
occupies 24 bits in the framebuffer memory (the former pixels are 32
bit aligned, while the latter pixels are called ``packed'' because the
pixels are not aligned and any given pixel may actually be stored in
two separate 32 bit units).</p>

<p>The meaning of dwDepth and dwBPP was corrected throughout the
source code, touching files such as wincmap.c, winscrinit.c,
InitOutput.c, winshadddnl.c, winshaddd.c, winshadgdi.c,
winnativegdi.c, winpfbdd.c, and win.h.  Also, we modify the depth 24
pixmap format at runtime to use 24 bits per pixel, instead of 32, when
Windows is running in 24 bit color; this matches the Windows pixel
format when running in 24 bit color.</p>

<p>The end result of all of this is that we now no longer report that
we have a depth 32 visual, as depth 32 visuals do not exist.  What we
were previously calling a depth 32 visual is actually a depth 24
visual with a different bits per pixel.  Advertising a proper visual
when running Windows at 32 bit color corrects the problem of KDE 3.0
not displaying icons or text with alpha channels.  Alan did the
magical part of discovering the underlying problem, I did the grunt
work of cleaning the code and making sure that all of the corner cases
were still handled.  (Alan Hourihane, Harold Hunt)</p>
</li>

<li>winshaddd.c, winshadddnl.c, winshadgdi.c, win.h, winscrinit.c -
Remove the essentially unused dwStride and dwStrideBytes variables
from the ScreenInfoRec.  (Harold Hunt)</li>

<li>winshaddd.c, winshadddnl.c - In winBltExposedRegionsShadowDD* ()
we try to restore the primary DirectDraw surface up to
WIN_REGAIN_SURFACE_RETRIES (currently 1) times when a bit block
transfer of the exposed regions fails.  This corrects the case where
switching a notebook from its internal display to an external display
(or vice versa) would cause the Cygwin/X window to blank and
fail to redraw itself until the Cygwin/X window was minimized
and then restored.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 60</h4>
<table>
<tbody>

<tr><td>Released: 2002-06-22 0007 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-07-06 0959 UTC</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-7</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>Do a clean before rebuilding the server to ensure that the RENDER
extension is compiled in and enabled.  The RENDER extension is now
reenabled.  Unfortunately, the RENDER extension is the cause of the
display problem with KDE 3.0 icons that have alpha channels at a depth
of 32 bits per pixel.  It was previously thought that the LAYER and
RANDR extensions were causing the problem because a rebuild of the
server with RENDER enabled did not actually have RENDER enabled, thus
making it seem that RENDER was not causing the problem.  (Harold
Hunt)</li>

<li>wincreatwnd.c - Remove a seemingly erroneous return from
winCreateBoundingWindowFullScreen when we are using the Shadow GDI
engine.  This return was before we called UpdateWindow and
BringWindowToTop.  This seems to have snuck in at some point during
merging of my local 4.2.0 and main trees.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 59</h4>
<table>
<tbody>

<tr><td>Released: 2002-06-14 0826 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-06-17 0804 UTC</td></tr>

<tr><td>Basis: Release 58</td></tr>

<tr><td>Cygwin setup.exe package: XFree86-xserv-4.2.0-6</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>win.h, xc/config/cf/cygwin.cf - Stop building RANDR and disable
Cygwin/X's LAYER support.  These two extensions were causing KDE
3.0 icons with alpha channels to not display.  RENDER is still
enabled.  (Harold Hunt)</li>

<li>xc/programs/Xserver/os/osinit.c - Don't close the stdin, stdout,
stderr file handles on Cygwin.  We are no longer a command-line
application so stdin, stdout, and stderr point to our first three file
handles, rather than to their usual locations.  This keeps the log
file from being closed when you run XWin.exe with 'start XWin.exe'.
(Stuart Adamson)</li>

<li>winwndproc.c - Call TrackMouseEvent to setup tracking for the
WM_MOUSELEAVE message.  When we see a WM_MOUSELEAVE message we show
the cursor if we are hiding it.  This will prevent cursors from
disappearing when using the -lesspointer parameter.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 58</h4>
<table>
<tbody>

<tr><td>Released: 2002-06-13 0102 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-06-17 0804 UTC</td></tr>

<tr><td>Basis: Release 57</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>InitOutput.c, XWin.man, win.h, winwndproc.c - Add the -lesspointer
command line parameter which causes Cygwin/X to hide the Windows
mouse cursor when the mouse is over any Cygwin/X window (whether
activated or not).  (Stuart Adamson)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 57</h4>
<table>
<tbody>

<tr><td>Released: 2002-06-08 2149 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-06-17 0804 UTC</td></tr>

<tr><td>Basis: Release 56</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>winwndproc.c - Call DefWindowProc after processing WM_NCMOUSEMOVE
messages.  This should fix the highlighting of the minimize and exit
buttons in Windows XP.  (Jehan Bing)</li>

<li>winwndproc.c, win.h, winallpriv.c - Make the cursor state
variable, fCursor, a static local variable in
winwndproc.c/winWindowProc (), rather than a member variable in the
winPrivScreenRec structure.  This makes sense because the Windows
cursor is either hidden or shown, as Windows does not hide or show the
mouse cursor on a per-window basis.  This also greatly simplifies the
handling of hiding and showing the Windows mouse cursor.  (Jehan
Bing)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 56</h4>
<table>
<tbody>

<tr><td>Released: 2002-06-07 2235 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-06-17 0804 UTC</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>InitOutput.c, win.h, wincreatewnd.c - Add a -nodecoration
parameter that creates the Cygwin/X window that is the same size
as the desktop, without a border.  The end effect is that you can
still get to the taskbar (even with Auto Hide enabled) and easily
switch to other application while not giving up any screen space to
the title bar, borders, etc.  (Jehan Bing)</li>

<li>winkeybd.c - Disregard the bogus key releases that we see when
losing the focus via Alt+Tab.  (Stuart Adamson)</li>

<li>win.h, winkeybd.h, winkeybd.c, winwndproc.c - Release all pressed
keys when the X server loses the keyboard focus.  (Stuart
Adamson)</li>

<li>InitOutput.c - Fix a typo that set iE3BTimeout to TRUE instead of
the specified timeout parameter when using the 3 button mouse
emulation timeout parameter with a single X screen.  (Stuart
Adamson)</li>

<li>wincursor.c - See if we are the foreground window before warping
the Windows cursor position.  This fixes the new bug that occurs if
you launch Cygwin/X and give another application the focus.  In
that case the Windows mouse cursor would still jump to the center of
the screen, even though the Cygwin/X window was not active.
(Harold Hunt)</li>

<li>winkeybd.h - Fix the bug where pressing both shift keys then
releasing them both would still cause all keyboard input to be
shift-modified.  The fix was to set the fixup for the non-extended
VK_SHIFT key to KEY_ShiftL.  (Harold Hunt)</li>

<li>wincreatewnd.c - Pass SW_SHOWNORMAL instead of SW_HIDE to
ShowWindow when running a DirectDraw engine in fullscreen mode.  This
fixes the bug where launching Cygwin/X then giving another
application the focus before the Cygwin/X window was displayed
would cause Cygwin/X to never display a window or register a
window handle on the Windows taskbar.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 55</h4>
<table>
<tbody>

<tr><td>Released: 2002-04-04 2206 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-04-11 0825 UTC</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>wincursor.c - Try to fix winPointerWarpCursor by offsetting by the
coordinates of the Cygwin/X client area upper left-hand
corner.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 54</h4>
<table>
<tbody>

<tr><td>Released: 2002-04-03 2033 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2002-04-11 0825 UTC</td></tr>

<tr><td>Basis: XFree86 4.2.0 CVS</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>wincursor.c - Attempt to make WarpCursor function correctly by
adding function winWarpCursor.  The new function calls SetCursorPos ()
with the x and y coordinates passed to winWarpCursor.  Hopefully this
works.  (Harold Hunt)</li>

<li>winkeybd.c - Change winKeybdBell () to call MessageBeep (MB_OK)
instead of Beep (0, 0).  Beep () uses the PC speaker on Windows
NT/2000, which isn't desireable.  It also seems that Beep () may have
been causing freezes for some users.  (Harold Hunt)</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 53</h4>
<table>
<tbody>

<tr><td>Released: 2001-11-11 1500 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2001-11-12 0348 EST</td></tr>

<tr><td>Basis: Release 52</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>winkeybd.c - winRestoreModeKeyStates () - This function is
supposed to handle the case where the user switches out of
Cygwin/X, changes the state of a mode key (i.e. Num Lock), then
returns to Cygwin/X.  Back in May I replaced a macro, WIN_XOR,
with the C binary operator ^.  At the time I didn't realize that I was
using the binary operator instead of the logical operator.  The end
result is that some of the mode keys were toggled each time that
Cygwin/X gained and lost focus, regardless of whether the key
state had changed.  The WIN_XOR macro is being used again, and I have
added a note as to why the C xor operator cannot be used.  This has
been broken for months, I'm really surprised that no one noticed it
yet.</li>

<li>winwndproc.c - winWindowProc () - Move the mode key state
save/restore function calls to the WM_KILLFOCUS and WM_SETFOCUS
messages, from the WM_ACTIVATE message.</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 52</h4>
<table>
<tbody>

<tr><td>Released: 2001-11-11 1200 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2001-11-11 1746 EST</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>InitOutput.c - ddxProcessArgument () - Add an undocumented
parameter, -ignoreinput, to allow programmers to see how the
non-NativeGDI engines behave when they do not receive input
events.</li>

<li>win.h - Remove a duplicate declaration for winRestoreModeKeyStates
().</li>

<li>win.h - Add defines for ABS_AUTOHIDE and ABS_ALWAYSONTOP that
should be in Cygwin's w32api shellapi.h</li>

<li>winengine.c - New file.  Move winDetectSupportedEngines () and
winSetEngine () here from winscrinit.c</li>

<li>wincreatewnd.c - New file.  Move winCreateBoundingWindowFullScreen
() and winCreateBoundingWindowWindowed () here from winscrinit.c</li>

<li>wincreatewnd.c - Add a function, winAdjustForAutoHide (), to
detect the location of auto-hide Window's TaskBars then back away one
pixel from those edges of the screen to allow the TaskBars to popup
when the mouse is moved over them.</li>

<li>winkeybd.c - winKeybdReleaseModifierKeys () - Don't check which
modifier keys are down when we lose focus, just release them all; this
doesn't have any adverse effect and it makes the code simpler.</li>

<li>winkeybd.c - Add a function, winSendKeyEvent () to simplify
sending a keystroke event.</li>

<li>winscrinit.c - Move winPaintBackground () to winmisc.c</li>

<li>winwndproc.c - winWindowProc () - Remove duplicate checks for
pScreenPriv == NULL.</li>

<li>winwndproc.c - winWindowProc () - Only reload the privates
property when the window handle has changed.  I think I did this
correctly this time around.</li>

<li>winwndproc.c - winWindowProc () - WM_HOTKEY - Create an engine
specific function to handle the Alt+Tab hotkey.  Move the Primary FB
engine's functionality into that new engine specific function.  Set all
other engine's function to perform no operation.</li>

<li>winwndproc.c - winWindowProc () - Change the check on input events
from pScreenInfo->dwEngine == WIN_ENGINE_NATIVE_GDI to
pScreenInfo->fIgnoreInput.</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 51</h4>
<table>
<tbody>

<tr><td>Released: 2001-10-30 1000 EST</td></tr>

<tr><td>Committed to XFree86 CVS: 2001-11-01 0724 EST</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>The NativeGDI engine now correctly draws the familiar X background
on startup.</li>

<li>The NativeGDI engine is now allowed to continue past the point of
drawing the X background, as a few needed spans operations are now
implemented.</li>

<li>Check out the NativeGDI engine yourself by launching 'XWin -engine
16'.  You'll see a series of message boxes telling you what operations
have been completed and /tmp/XWin.log will have over one thousand
lines describing those operations.  Note: The NativeGDI engine doesn't
do anything useful yet, other than drawing the background and a
primitive cursor.</li>

</ul>
</td>
</tr>
</tbody>
</table>


<h4>Release 50</h4>
<table>
<tbody>

<tr><td>Released: 2001-10-20 1622 EDT</td></tr>

<tr><td>Committed to XFree86 CVS: 2001-10-22 1122 EDT</td></tr>

<tr><td>Basis: XFree86 CVS</td></tr>

<tr><td>Download source: no longer distributed</td></tr>

<tr><td>Changes:</td></tr>

<tr>
<td>
<ul>

<li>General - The NativeGDI engine can now create the familiar X
background pattern that is used to fill the initial X Server screen.
However, an all white pattern, instead of the correct pattern, is
being used to fill the server screen.  I can't find the mistake in
winfillsp.c, wingetsp.c, or winsetsp.c, so I'm making this release to
see if anyone can find the mistake.</li>

<li>winwndproc.c/winWindowProc () - Replace #if
!WIN_NATIVE_GDI_SUPPORT checks with checks for pScreenInfo->dwEngine
== WIN_SERVER_NATIVE_GDI.  Certain sections of winWindowProc (), such
as mouse input, cannot yet be processed by the NativeGDI engine.
Prohibiting user input causes the server startup process to be the
same every time, which makes debugging possible.</li>

<li>win.h/WIN_NATIVE_GDI_SUPPORT - Set to YES, again.  This works now
because we are no longer omitting sections of winwndproc.c (see
above).</li>

<li>win.h/DEBUG_MSG () - Make the macro accept a format string and a
variable list of data parameters in a similar manner to printf ().
DEBUG_MSG () sends a text message to the Win32 API's MessageBox ()
function.</li>

<li>winpixmap.c/winCreatePixmap () - Call
winnativegdi.c/winCreateDIBNativeGDI () for device independent bitmap
(DIB) creation.</li>

<li>winnativegdi.c/winCreateDIBNativeGDI () - Setup a simple black and
white color table for monochrome DIBs.</li>

<li>win.h - Remove duplicate #include of stdio.h</li>

<li>win.h - Move debugging message macros to after stdio.h in
included.</li>

<li>win.h/winPrivPixmapRec - Change the pixmap bits pointer from void
* to BYTE *.</li>

<li>winfillsp.c, wingetsp.c, winsetsp.c, wingc.c - Don't select the
drawable bitmap in wingc.c, rather, select and deselect the drawable
bitmap in the function that operates upon it.  A given bitmap can only
be selected into one device context (hdc) at a time; selecting bitmaps
in wingc.c/winValidateGC () could cause a bitmap to be selected into
more than one hdc at a time which would cause graphics operations to
fail.</li>

<li>winfillsp.c, winsetsp.c - Check for a failure from SelectObject ()
when selecting bitmaps into a device context; this is a sanity check
to make sure that a bitmap was deselected after a previous
operation.</li>

<li>winwndproc./winWindowProc (), winshaddd.c/winCloseScreenShadowDD
(), winshadddnl.c/winCloseScreenShadowDDNL (),
winshadgdi.c/winCloseScreenShadowGDI (),
winpfbdd.c/winCloseScreenPrimaryDD () - Remove #if 0'd code for
clipboard chain functionality that was moved to the <a
href="http://x.cygwin.com/devel/xwinclip/">xwinclip
program</a>.</li>

</ul>
</td>
</tr>
</tbody>
</table>
